package LPresentacion;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

import LNegocio.Bibliotecario;
import LNegocio.GestorBibliotecario;
import LNegocio.Localizacion;
import LNegocio.Sala;
import LPresentacion.MostrarLocalizaciones.tablaLocalizaciones;
import LPresentacion.MostrarOpiniones.tablaOpiniones;

public class MostrarSalas extends JInternalFrame implements ActionListener
{
	
	private static final long serialVersionUID = 1L;

	private HashMap <String,Sala> salas;
	
	private GestorBibliotecario gb;
	
	private tablaSalas tt;
	private JTable tbSalas;
			
	private JButton botonAceptar,botonEliminar;
	
	//Create the scroll pane and add the table to it.
    JScrollPane scrollPane; 
    JPanel botones;  
	
    public MostrarSalas(GestorBibliotecario gb) 
    {
        super("Salas", true, true, true, true); 
        this.gb= gb;
        this.salas = gb.getSalas();
        setVisible(true);
        setSize(640,450);
		inicializarSubComponentes();
		cargarFormulario();
    }
    
    public void inicializarSubComponentes()
    {
    	tbSalas=null;
		tt = new tablaSalas();
		tt.crearTabla(salas);
		tbSalas = new JTable(tt);
		tbSalas.setFillsViewportHeight(true);
		tbSalas.setEnabled(true);
		tbSalas.setRowSelectionAllowed(true);
		tbSalas.setAutoCreateRowSorter(true);
		tt.fireTableDataChanged();		
    	
    	try
		{
			scrollPane= new JScrollPane(tbSalas);
			//Add the scroll pane to this panel.
			JLabel aviso = new JLabel ("Click en los titulos de la tabla para ordenar");
			this.getContentPane().setLayout(new BorderLayout());
	        this.getContentPane().add(scrollPane,"Center");
	        this.getContentPane().add(aviso,"North");
	        
	        botonAceptar=new JButton("");
			botonAceptar.addActionListener(this);
			botonAceptar.setIcon(new ImageIcon(Inicio.class.getResource("/imagenes/ok.jpg")));
			botonEliminar=new JButton("");
			botonEliminar.addActionListener(this);
			botonEliminar.setIcon(new ImageIcon(Inicio.class.getResource("/imagenes/delete.jpg")));

			botones=new JPanel();
			botones.setLayout(new FlowLayout());
			botones.add(botonAceptar);
			botones.add(botonEliminar);
			
			
			this.getContentPane().add(botones,"South");
		}

		catch(Exception e)
		{
			System.out.println("Error en la carga de la tabla");
		}
    }
    
    public boolean cargarFormulario() 
    {
    	
    	boolean resultado = true;
    	this.setVisible(true);
		inicializarSubComponentes();
	
		return resultado;
    }
    public void eliminarSala()
    {
    	String  sala  = (String) tbSalas.getValueAt(tbSalas.getSelectedRow(), 0);
    	GestorBibliotecario gb = new GestorBibliotecario();
    	gb.eliminarSala(sala);
		refreshTable();
    }
    public  void refreshTable() 
   	{
   		GestorBibliotecario objGestor = new GestorBibliotecario();
   		tablaSalas tcm = (tablaSalas) tbSalas.getModel();
   		tcm.setData(objGestor.getSalas());
   		tcm.fireTableDataChanged();
   	}
    public void actionPerformed(ActionEvent e)
	{	
		if (e.getSource() instanceof JButton) 
		{
			JButton btnPulsado = (JButton)e.getSource();

			if (btnPulsado == botonAceptar) 
			{
				dispose();
			}			
			else if (btnPulsado == botonEliminar)
			{
				try {
					eliminarSala();
				} catch (Exception e2) {
					// TODO: handle exception
					JOptionPane.showMessageDialog(null, "No se ha seleccionada ninguna fila");
				}
			}
		}
	}
    
    class tablaSalas extends AbstractTableModel
    {
 		String[] columnNames = {"Nombre", "Piso"};
        Object[][] data;
        
        public void crearTabla(Map<String,Sala> salas)
        {
        	int i = 0;
        	int filas = salas.size();
    		data = new Object[filas][];
    		Iterator <String> iterator = salas.keySet().iterator();
			  while (iterator.hasNext()) 
			  {
				  Object key = iterator.next();
				  Sala b = salas.get(key);
    		  				
	    			Object[] a = 
	    			{
	    				//new Integer(entry.getKey()),
	    					new String (b.getNomSala()),
		    				new String (Integer.toString(b.getPiso())),
	    			};
	    			data[i] = a;
	    			i++;
    		}
        }
        public void setData(Map<String,Sala> m) 
        {
        	int filas = m.size();
    		int cont;
    		data=new Object[filas][];
    		cont=0;
    		    		 
    		for (Map.Entry<String, Sala> entry : m.entrySet())
     		{
     			Object[]a={
  					   new String(entry.getValue().getNomSala()),
  					   new String(Integer.toString(entry.getValue().getPiso()))
  						};
     			data[cont]=a;
     			cont++;
     		}
        }
       public int getColumnCount() 
        {
            return columnNames.length;
        }

        public int getRowCount() 
        {
            return data.length;
        }

        public String getColumnName(int col) 
        {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col) 
        {
            return data[row][col];
        }       
    }
}
